<?php
namespace Models;

require_once('\Models\Database.php');
require_once('\Common\DBTables.php');
require_once('\Models\Password.php');

if(!isset($_SESSION['loggedIn']))
	$_SESSION['loggedIn'] = false;

class LoginModel
{
	private static $_loggedIn = "loggedIn";
	private static $_userName = "userName";
	private static $_userId = "userId"; 
	
	/**
	 * Kontrollerar om användaren är inloggad
	 * @return Boolean
	 */
	public function IsLoggedIn()
	{
		// Om sessionsvariabeln är satt och är true
		if(isset($_SESSION[self::$_loggedIn]) && $_SESSION[self::$_loggedIn] == true)
			return true;
		else
			return false;
	}
	
	/**
	 * Verifierar inloggning
	 * @param Username string
	 * @param Password string
	 * @return Boolean
	 */
	public function Login(\Models\Database $db, $userName, $password)
	{
		$dbt = new \Common\DBTables();
		
		$sql = "SELECT ".
		$dbt->userIdField.",".
		$dbt->userTypeIdField.",".
		$dbt->userNameField.",".
		$dbt->firstNameField.",".
		$dbt->lastNameField.",".
		$dbt->passwordField." 
		FROM ".$dbt->userTable." 
		WHERE ".$dbt->userNameField."='$userName'"; 
		
		$statement = $db->Select($sql);
		
		// Bind resultat innan vi anropar fetch()
		if ($statement->bind_result($dbt->userIdField, $dbt->userTypeIdField, $dbt->userNameField, $dbt->firstNameField, $dbt->lastNameField, $dbt->passwordField) == FALSE)
			throw new \Exception($this->mysqli->error);
		
		// Om en användare hittas
	    if($statement->fetch())
		{
			// Hasha lösenordet och matcha det mot lösenordet i DB
			if(\Models\Password::checkPassword($dbt->passwordField, $password))
				$this->setLoggedIn($dbt->userIdField, $dbt->userNameField);
			else
				return false;
		}
		else
			return false;
		
		$statement->close();
		
		return true;
	}

	public function setLoggedIn($userId, $userName)
	{
		$_SESSION[self::$_loggedIn] = true;
		$_SESSION[self::$_userId] = $userId;
		$_SESSION[self::$_userName] = $userName;
	}
	
	/**
	 * Returnerar användarid
	 * @return int | bool
	 */
	public function getUserId()
	{
		if(isset($_SESSION[self::$_userId]) && is_numeric($_SESSION[self::$_userId]))
			return $_SESSION[self::$_userId];
		else
			return false;
	}
	
	/**
	 * Returnerar användarnamn
	 * @return string | bool
	 */
	public function getUserName()
	{
		if(isset($_SESSION[self::$_userName]))
			return $_SESSION[self::$_userName];
		else
			return false;
	}
	
	/**
	 * Loggar ut användaren
	 */
	public function Logout()
	{
		// Om sessionsvariabeln är satt och är true
		if(isset($_SESSION[self::$_loggedIn]) && $_SESSION[self::$_loggedIn] == true)
		{
			unset($_SESSION[self::$_loggedIn]);
			unset($_SESSION[self::$_userId]);
			unset($_SESSION[self::$_userName]);
		}
	}
}
?>